﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using vudu.Presentacion.Contrato.VU_09_Gestionar_Carga_de_Archivos_PDF;
using vudu.Logica.Fachada;
using vudu.ClasesDominio;
using System.Data;
using System.IO;
using System.Web.UI.HtmlControls;

namespace vudu.Presentacion.Presentador.VU_09_Gestionar_Carga_de_Archivos_PDF
{
    public class PresentadorConsultarArchivoPdf
    {

        #region Atributos 
        private IContratoConsultarArchivoPdf _vista;
        private EnlaceLogico _fachada;
        private Profesor _miProfesor;
        private Estudiante _miEstudiante;
        private List<SeccionMateria> _misSecciones;
        public List<Materia> _misMaterias;
        private List<Universidad> _misUniversidades;
        private List<Escuela> _misEscuelas;
        private int _resultado;
        private string _rutaArchivosPdf;
        private string _rutaImagenCarpetaPdf;
        private string _rutaImagenArchivosPdf;

        #endregion

        #region Gets y Sets
        public List<Universidad> MisUniversidades
        {
            get { return _misUniversidades; }
            set { _misUniversidades = value; }
        }
        public List<Escuela> MisEscuelas
        {
            get { return _misEscuelas; }
            set { _misEscuelas = value; }
        }
        public List<Materia> MisMaterias
        {
            get { return _misMaterias; }
            set { _misMaterias = value; }
        }
        public List<SeccionMateria> MisSecciones
        {
            get { return _misSecciones; }
            set { _misSecciones = value; }
        }
        #endregion


        #region Constructor
        public PresentadorConsultarArchivoPdf(IContratoConsultarArchivoPdf vista)
        {
            _vista = vista;   
            _fachada = (EnlaceLogico)_vista.Sesion["Fachada"];
            _rutaArchivosPdf = System.Configuration.ConfigurationManager.AppSettings["rutaArchivosPdf"];
            _rutaImagenCarpetaPdf = System.Configuration.ConfigurationManager.AppSettings["rutaImagenCarpetaPdf"];
            _rutaImagenArchivosPdf = System.Configuration.ConfigurationManager.AppSettings["rutaImagenArchivoPdf"];
            //_misMaterias = _fachada.ConsultarListaMateriasConPractica(_miEscuela.NombreEscuela);

        }
       
        #endregion

        #region Metodos Presentador
        public void CargarInformacionPagina(string miRol)
        {
            //aqui cargo los combos y labels dependiendo si es estudiante o profesor
            if (miRol.Equals("Profesor"))
                CargarInformacionProfesor();
            else
                CargarInformacionEstudiante();
        }

        public void CargarInformacionProfesor()
        {
            //cargar info profesor
            _miProfesor = (Profesor)_fachada.RolActual;
            _vista.LabelNombreUsuario.Text = "Profesor(a): " + _miProfesor.Nombre + " " + _miProfesor.Apellido;
            //_vista.LabelMiga.Text = " <a class=\"miga\" href=\"../HomePages/HomeProfesor.aspx\">Inicio </a> &gt; <a class=\"migaActual\"> Consultar Archivo </a>";
            this._misUniversidades = _fachada.ConsultarUniversidadesProfesor(_miProfesor.Crn);
             foreach (Universidad uni in _misUniversidades)
            {
                // Creamos un nuevo registro para DropDownList1
                ListItem registroLista = new ListItem();
                if (!uni.Nombre.Trim().Equals(""))
                {
                    registroLista.Text = uni.Nombre;
                    registroLista.Value = uni.Nombre;
                }
                _vista.ComboBoxUni.Items.Add(registroLista);

            }
             if (_misUniversidades == null)
             {
                 _vista.LabelNombreUsuario.Text = "Profesor(a): ;";
             }
        }

        public void CargarInformacionEstudiante()
        {
            _miEstudiante = (Estudiante)_fachada.RolActual;
            //_vista.LabelMiga.Text = " <a class=\"miga\" href=\"../HomePages/HomeEstudiante.aspx\">Inicio </a> &gt; <a class=\"migaActual\"> Consultar Archivo </a>";
            _vista.LabelNombreUsuario.Text = "Alumno(a): " + _miEstudiante.Nombre + " " + _miEstudiante.Apellido;
            CargarComboMateriaEstudiante();
            _vista.MultiViewConsultar.ActiveViewIndex = 2;
            
        }

        public void CargarComboEscuela(string item, int crnProfesor)
        {
            if (_vista.ComboBoxUni.SelectedValue != "0")
                _vista.LabelUni.ForeColor = System.Drawing.Color.Black;

            _vista.ComboBoxEscuela.Items.Clear();
            ListItem registroLista = new ListItem("- Selecciona -", "0");
            _vista.ComboBoxEscuela.Items.Add(registroLista);
            _misEscuelas = _fachada.ConsultarEscuelasProfesor(item, crnProfesor);
            foreach (Escuela escuela in _misEscuelas)
            {
                // Creamos un nuevo registro para DropDownList1
                ListItem registroLista2 = new ListItem();
                registroLista2.Text = escuela.NombreEscuela;
                registroLista2.Value = escuela.NombreEscuela;
                _vista.ComboBoxEscuela.Items.Add(registroLista2);

            }               
        }

        public void CargarComboMateriaProfesor(int crnProfesor, string nombreUniv, string nombreEscuela)
        {
            if (_vista.ComboBoxEscuela.SelectedValue != "0")
                _vista.LabelEscuela.ForeColor = System.Drawing.Color.Black;

            _vista.ComboBoxMateria.Items.Clear();
            ListItem registroLista = new ListItem("- Selecciona -", "0");
            _vista.ComboBoxMateria.Items.Add(registroLista);
            _misMaterias = _fachada.ConsultarMateriasProfesorPdf(crnProfesor, nombreUniv, nombreEscuela);
            foreach (Materia materia in _misMaterias)
            {
                // Creamos un nuevo registro para DropDownList1
                ListItem registroLista2 = new ListItem();
                registroLista2.Text = materia.Nombre;
                registroLista2.Value = materia.Nombre;
                _vista.ComboBoxMateria.Items.Add(registroLista2);
            }     

        }
        public void CargarComboMateriaEstudiante()
        {
               _vista.ComboBoxMateriaAlumno.Items.Clear();
                ListItem registroLista = new ListItem("- Selecciona -", "0");
                _vista.ComboBoxMateriaAlumno.Items.Add(registroLista);
                _misSecciones = _fachada.ConsultarSeccionesEstudianteArchivoPdf(_miEstudiante);

                //Recorremos la lista secciones de un Estudiante de manera tal de saber todas las materias que posee por seccion.
                foreach (SeccionMateria seccionMateria in _misSecciones)
                {
                    // Creamos un nuevo registro para DropDownList1
                    ListItem registroLista2 = new ListItem();
                    registroLista2.Text = seccionMateria.Materia.Nombre + "  Seccion 0" + seccionMateria.Codigo.ToString();
                    registroLista2.Value = seccionMateria.IdSeccionMateria.ToString();
                    _vista.ComboBoxMateriaAlumno.Items.Add(registroLista2);

                }   
        }

        public void CargarComboSeccionesProfesorPdf(int crnProfesor, string nombreUniv, string nombreEscuela,string nombreMateria)
        {
            if (_vista.ComboBoxMateria.SelectedValue != "0")
                _vista.LabelMateria.ForeColor = System.Drawing.Color.Black;

            _vista.ComboBoxSeccion.Items.Clear();//secciones del profesor
            ListItem registroLista = new ListItem("- Selecciona -", "0");
            _vista.ComboBoxSeccion.Items.Add(registroLista);
            _misSecciones = _fachada.ConsultarSeccionesProfesorPdf(crnProfesor, nombreUniv, nombreEscuela, nombreMateria);
            foreach (SeccionMateria seccion in _misSecciones)
            {
                // Creamos un nuevo registro para DropDownList1
                ListItem registroLista2 = new ListItem();
                registroLista2.Text = seccion.Codigo.ToString();
                registroLista2.Value = seccion.Codigo.ToString();
                _vista.ComboBoxSeccion.Items.Add(registroLista2);

            }

           
        }
        public void ComboBoxSeccion_SelectedIndexChanged()
        {
            if (_vista.ComboBoxSeccion.SelectedValue != "0")
            {
                _vista.LabelSeccion.ForeColor = System.Drawing.Color.Black;
                _vista.LabelTransaccionFallida.Visible = false;
            }

        }
        public void limpiarCombosUni()
        {
            _vista.ComboBoxEscuela.Items.Clear();
            ListItem registroLista = new ListItem("- Selecciona -", "0");
            _vista.ComboBoxEscuela.Items.Add(registroLista);
            _vista.ComboBoxMateria.Items.Clear();
            ListItem registroLista2 = new ListItem("- Selecciona -", "0");
            _vista.ComboBoxMateria.Items.Add(registroLista2);
            _vista.ComboBoxSeccion.Items.Clear();
            ListItem registroLista3 = new ListItem("- Selecciona -", "0");
            _vista.ComboBoxSeccion.Items.Add(registroLista3);
        }
        public void limpiarCombosEscuela()
        {
            _vista.ComboBoxMateria.Items.Clear();
            ListItem registroLista2 = new ListItem("- Selecciona -", "0");
            _vista.ComboBoxMateria.Items.Add(registroLista2);
            _vista.ComboBoxSeccion.Items.Clear();
            ListItem registroLista3 = new ListItem("- Selecciona -", "0");
            _vista.ComboBoxSeccion.Items.Add(registroLista3);
        }


        public void CargarDatosConsultaProfesor()
        {
            _vista.MultiViewConsultar.ActiveViewIndex = 1;
            _vista.LabelMateriaProfesor.Text = _vista.ComboBoxMateria.SelectedItem.Text + " - Secci&oacute;n: 0" + _vista.ComboBoxSeccion.SelectedItem.Text;
        }

        public Escuela ObtenerEscuelaEliminar(List<Escuela> escuelas)
        {
            Escuela e = new Escuela();
             foreach (Escuela esc in escuelas)
            {
                if (_vista.ComboBoxEscuela.SelectedItem.Text.Equals(esc.NombreEscuela))
                     e= esc;
             }
             return e;
        }
        public Materia ObtenerMateriaEliminar(List<Materia> materias)
        {
            Materia m = new Materia();
            foreach (Materia mat in materias)
            {
                if (_vista.ComboBoxMateria.SelectedItem.Text.Equals(mat.Nombre))
                    m=mat;
            }
            return m;
        }

        public SeccionMateria ObtenerSeccionEliminar(List<SeccionMateria> secciones)
        {
            SeccionMateria s = new SeccionMateria();
            foreach (SeccionMateria seccion in secciones)
            {
                if (_vista.ComboBoxSeccion.SelectedItem.Text.Equals(seccion.Codigo.ToString().Trim()))
                return seccion;
            }
            return s;
        }

        public bool ValidarSeleccion()
        {
            bool estado = true;

            if (_vista.ComboBoxUni.SelectedValue == "0")
            {
                mensajesDeEstado();
                _vista.LabelUni.ForeColor = System.Drawing.Color.Red;
                estado = false;
            }
            else
            {
                _vista.LabelTransaccionFallida.Visible = false;
                _vista.LabelUni.ForeColor = System.Drawing.Color.Black;
            }

            if (_vista.ComboBoxEscuela.SelectedValue == "0")
            {
                mensajesDeEstado();
                _vista.LabelEscuela.ForeColor = System.Drawing.Color.Red;
                estado = false;
            }
            else
            {
                _vista.LabelTransaccionFallida.Visible = false;
                _vista.LabelEscuela.ForeColor = System.Drawing.Color.Black;
            }
            if (_vista.ComboBoxMateria.SelectedValue == "0")
            {
                mensajesDeEstado();
                _vista.LabelMateria.ForeColor = System.Drawing.Color.Red;
                estado = false;
            }
            else
            {
                _vista.LabelTransaccionFallida.Visible = false;
                _vista.LabelMateria.ForeColor = System.Drawing.Color.Black;
            }

            if (_vista.ComboBoxSeccion.SelectedValue == "0")
            {
                mensajesDeEstado();
                _vista.LabelSeccion.ForeColor = System.Drawing.Color.Red;
                estado = false;
            }
            else
            {
                _vista.LabelTransaccionFallida.Visible = false;
                _vista.LabelSeccion.ForeColor = System.Drawing.Color.Black;
            }
            return estado;
        }


        public void mensajesDeEstado()
        {
            _vista.LabelTransaccionFallida.Text = "Operación Fallida: Todos los datos son obligatorios";
            _vista.LabelTransaccionFallida.Visible = true;
        }




        public void MostrarMensajeError()
        {
        }


        public void ComboBoxUni_SelectedIndexChanged()
        {
            if (_vista.ComboBoxUni.SelectedValue != "0")
            {
                Profesor p = (Profesor)_fachada.RolActual;
                CargarComboEscuela(_vista.ComboBoxUni.SelectedItem.Text.Trim(), p.Crn);
                _vista.Sesion["ListaEscuelaPdf"] = _misEscuelas;
            }
            else
            {
               limpiarCombosUni();
            }
        }

        public void ComboBoxEscuela_SelectedIndexChanged()
        {
            if (_vista.ComboBoxEscuela.SelectedValue != "0")
            {
                Profesor p = (Profesor)_fachada.RolActual;
                CargarComboMateriaProfesor(p.Crn, _vista.ComboBoxUni.SelectedItem.Text.Trim(), _vista.ComboBoxEscuela.SelectedItem.Text.Trim());
                _vista.Sesion["ListaMateriaPdf"] = MisMaterias;
                List<Materia> mat = (List<Materia>)_vista.Sesion["ListaMateriaPdf"];
            }
            else
            {
                _vista.ComboBoxMateria.Items.Clear();
                ListItem registroLista = new ListItem("- Selecciona -", "0");
                _vista.ComboBoxMateria.Items.Add(registroLista);
            }
        }

        public void ComboBoxMateria_SelectedIndexChanged()
        {
            if (_vista.ComboBoxMateria.SelectedValue != "0")
            {
                Profesor p = (Profesor)_fachada.RolActual;
                CargarComboSeccionesProfesorPdf(p.Crn, _vista.ComboBoxUni.SelectedItem.Text.Trim(), _vista.ComboBoxEscuela.SelectedItem.Text.Trim(), _vista.ComboBoxMateria.SelectedItem.Text.Trim());
                _vista.Sesion["ListaSeccionMateriaPdf"] = MisSecciones;
            }
            else
            {
                _vista.ComboBoxSeccion.Items.Clear();
                ListItem registroLista = new ListItem("- Selecciona -", "0");
                _vista.ComboBoxSeccion.Items.Add(registroLista);
            }
        }

        public void Button1_Click()
        {
            if (ValidarSeleccion())
            {
                CargarDatosConsultaProfesor();
                _vista.Sesion["EscuelaPdf"] = ObtenerEscuelaEliminar((List<Escuela>)_vista.Sesion["ListaEscuelaPdf"]);
                _vista.Sesion["SeccionMateriaPdf"] = ObtenerSeccionEliminar((List<SeccionMateria>)_vista.Sesion["ListaSeccionMateriaPdf"]);
                _vista.Sesion["MateriaPdf"] = ObtenerMateriaEliminar((List<Materia>)_vista.Sesion["ListaMateriaPdf"]);
                Profesor miProfe = (Profesor)_fachada.RolActual;
                _vista.TreeView1.Nodes.Clear();
                llenarTreeView();
                _vista.TreeView1.CollapseAll();
                //multiViewConsultar.ActiveViewIndex = 0;
                String ruta = _rutaArchivosPdf + miProfe.Cedula.ToString() + miProfe.Nombre + miProfe.Apellido + _vista.ComboBoxMateria.SelectedItem.Text + _vista.ComboBoxSeccion.SelectedItem.Text + "/";
                DirectoryInfo prueba = new DirectoryInfo(HttpContext.Current.Server.MapPath(ruta));
                if (!prueba.Exists)
                {
                    DirectoryInfo hola = new DirectoryInfo(HttpContext.Current.Server.MapPath(_rutaArchivosPdf));
                    string path2 = miProfe.Cedula.ToString() + miProfe.Nombre + miProfe.Apellido + _vista.ComboBoxMateria.SelectedItem.Text + _vista.ComboBoxSeccion.SelectedItem.Text;
                    hola.CreateSubdirectory(path2);
                }
                if (_resultado == 0)
                {
                    _vista.LabelResultadoConsulta.Text = "Usted No Tiene Archivos Agregados";
                    _vista.LinkEliminar.Visible = false;
                }
            }
           
        }


        public void llenarTreeView()
        {
            string grupo = "", categoria = "";
            TreeNode nodoG = new TreeNode();
            Profesor miProfesor = (Profesor)_fachada.RolActual;
            String ruta = _rutaArchivosPdf + miProfesor.Cedula.ToString() + miProfesor.Nombre + miProfesor.Apellido + _vista.ComboBoxMateria.SelectedItem.Text + _vista.ComboBoxSeccion.Text.ToString() + "/";
            String ruta2, ruta3;
            DataTable dtt = _fachada.ConsultarArchivoProfesor(miProfesor.Crn, int.Parse(_vista.ComboBoxSeccion.SelectedItem.Text.Trim()));
            _resultado = dtt.Rows.Count;
            //_vista.LabelMiga.Text=miProfesor.Crn+ int.Parse(_vista.ComboBoxSeccion.SelectedItem.Text.Trim()).ToString();
            for (int i = 0; i < dtt.Rows.Count; i++)
            {
                DataRow filaM = dtt.Rows[i];
                if (grupo != filaM[4].ToString())
                {
                    grupo = filaM[4].ToString();
                    categoria = filaM[2].ToString();
                    ruta2 = ruta + categoria;
                    nodoG = new TreeNode(grupo, "", _rutaImagenCarpetaPdf, "", "");
                    nodoG.ChildNodes.Add(new TreeNode(filaM[2].ToString(), "", _rutaImagenArchivosPdf, ruta2, "_blank"));
                    nodoG.ChildNodes.Add(nodoG);
                    _vista.TreeView1.Nodes.Add(nodoG);
                }
                else
                {
                    grupo = filaM[4].ToString();
                    categoria = filaM[2].ToString();
                    ruta3 = ruta + categoria;
                    nodoG.ChildNodes.Add(new TreeNode(filaM[2].ToString(), "", _rutaImagenArchivosPdf, ruta3, "_blank"));
                }
            }
            dtt.Dispose();
            dtt = null;
        }

        public void llenarTreeViewEstudiante()
        {
            string grupo = "", categoria = "";
            TreeNode nodoG = new TreeNode();
            String ruta2, ruta3;
           // _vista.LabelMiga.Text = (_vista.ComboBoxMateriaAlumno.SelectedValue.ToString());
            DataTable dtt = _fachada.ConsultarArchivoEstudiante(int.Parse(_vista.ComboBoxMateriaAlumno.SelectedValue.ToString()));
            _resultado = dtt.Rows.Count;
            for (int i = 0; i < dtt.Rows.Count; i++)
            {
                DataRow filaM = dtt.Rows[i];

                if (grupo != filaM[8].ToString())
                {
                    grupo = filaM[8].ToString();
                    categoria = filaM[1].ToString();
                    ruta2 = filaM[2] + categoria;
                    nodoG = new TreeNode(grupo, "", _rutaImagenCarpetaPdf, "", "");

                    nodoG.ChildNodes.Add(new TreeNode(filaM[1].ToString(), "", _rutaImagenArchivosPdf, ruta2, "_blank"));
                    nodoG.ChildNodes.Add(nodoG);
                    _vista.TreeViewEstudiante.Nodes.Add(nodoG);
                }
                else
                {
                    grupo = filaM[3].ToString();
                    categoria = filaM[1].ToString();
                    ruta3 = filaM[2] + categoria;
                    nodoG.ChildNodes.Add(new TreeNode(filaM[1].ToString(), "", _rutaImagenArchivosPdf, ruta3, "_blank"));
                }
            }
            dtt.Dispose();
            dtt = null;
        }

        public void ButtonConsultarAlumno_Click()
        {
            if (validarSeleccionE())
            {
                llenarTreeViewEstudiante();
                _vista.TreeViewEstudiante.CollapseAll();
                if (_resultado == 0)
                {
                    _vista.LabelResultadoAlumno.Text = "Nota: El Profesor todav&iacute;a no ha montado Archivos para esta Secci&oacute;n";
                }
            }
           
        }

        public bool validarSeleccionE ()
        {
            bool estado = true;
            if (_vista.ComboBoxMateriaAlumno.SelectedValue == "0")
            {
                mensajesDeEstado();
                _vista.LabelMateriaAlumno.ForeColor = System.Drawing.Color.Red;
                estado = false;
            }
            else
            {
                _vista.LabelTransaccionFallida.Visible = false;
                _vista.LabelMateriaAlumno.ForeColor = System.Drawing.Color.Black;
            }
            return estado;
        }

        public void ComboBoxSeccionAlumno_SelectedIndexChanged()
        {
            _vista.LabelTransaccionFallida.Visible = false;
            _vista.LabelMateriaAlumno.ForeColor = System.Drawing.Color.Black;
        }

        public void ClickLinkAtras()
        {
            _vista.MultiViewConsultar.ActiveViewIndex = 0;
        }

        #endregion
    }
}